package calvin.study.rabbitmq.config.mq;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 直连交换机、队列、绑定关系配置
 * 
 * @author wh
 *
 */
@Configuration
public class DirectMqConfig {

	// 声名交换机,并指定一个交换机类型
	@Bean
	public DirectExchange directExchange() {
		return new DirectExchange("direct_exchange", true, false);
	}

	// 声明队列
	@Bean
	public Queue duanxinQueue() {
		// durable:是否持久化,默认是false,持久化队列：会被存储在磁盘上，当消息代理重启时仍然存在，暂存队列：当前连接有效
		// exclusive:默认也是false，只能被当前创建的连接使用，而且当连接关闭后队列即被删除。此参考优先级高于durable
		// autoDelete:是否自动删除，当没有生产者或者消费者使用此队列，该队列会自动删除。

		// 一般设置一下队列的持久化就好,其余两个就是默认false
		return new Queue("direct_queue1", true);
	}

	// 声明队列
	@Bean
	public Queue weixinQueue() {
		// durable:是否持久化,默认是false,持久化队列：会被存储在磁盘上，当消息代理重启时仍然存在，暂存队列：当前连接有效
		// exclusive:默认也是false，只能被当前创建的连接使用，而且当连接关闭后队列即被删除。此参考优先级高于durable
		// autoDelete:是否自动删除，当没有生产者或者消费者使用此队列，该队列会自动删除。

		// 一般设置一下队列的持久化就好,其余两个就是默认false
		return new Queue("direct_queue2", true);
	}

	// 声明绑定队列 将队列和交换机绑定, 并设置用于匹配键：direct_exchange
	@Bean
	public Binding binding1() {
		return BindingBuilder.bind(duanxinQueue()).to(directExchange()).with("direct_queue1");
	}

	@Bean
	public Binding binding2() {
		return BindingBuilder.bind(weixinQueue()).to(directExchange()).with("direct_queue2");
	}
	
	@Bean
	public DirectExchange wxSendMsgExchange() {
		return new DirectExchange("wx_send_msg_exchange", true, false);
	}
	
	// 声明队列
	@Bean
	public Queue wxTempMsgQueue() {
		// durable:是否持久化,默认是false,持久化队列：会被存储在磁盘上，当消息代理重启时仍然存在，暂存队列：当前连接有效
		// exclusive:默认也是false，只能被当前创建的连接使用，而且当连接关闭后队列即被删除。此参考优先级高于durable
		// autoDelete:是否自动删除，当没有生产者或者消费者使用此队列，该队列会自动删除。

		// 一般设置一下队列的持久化就好,其余两个就是默认false
		return new Queue("wx_temp_msg_queue", true);
	}
	
	
	@Bean
	public Binding binding3() {
		return BindingBuilder.bind(wxTempMsgQueue()).to(wxSendMsgExchange()).with("rk_temp_msg_send");
	}



}
